Matlab:求解对数方程 |
您所在的位置:网站首页 › lamber w函数 › Matlab:求解对数方程 |
关于a,我想求解以下方程: x = (a-b-c+d)/log((a-b)/(c-d))其中 x、b、c 和 d 是已知的。我用 Wolfram Alpha 求解方程,结果是: a = b-x*W(-((c-d)*exp(d/x-c/x))/x)其中 W 是产品日志函数(Lambert W 函数)。在 Wolfram Alpha page 可能更容易看到它. 我使用了 Matlab 内置的 lambertW 函数来求解方程。这相当慢,并且是我脚本中的瓶颈。还有另一种更快的方法吗?它不必精确到小数点后 10 位。 编辑:
我不知道这个方程式这么难解。这是一张说明我的问题的图片。温度 b-d 加上 LMTD 在每个时间步长中都不同,但都是已知的。热量从红线 (CO2) 转移到蓝线(水)。我需要找到温度“a”。没想到这么难算! :P
最佳答案 另一个选项基于更简单的 Wright ω function : a = b - x.*wrightOmega(log(-(c-d)./x) - (c-d)./x);假设 d ~= c + x.*wrightOmega(log(-(c-d)./x) - (c-d)./x)(即 d ~= c +b-a,x 在这种情况下是 0/0)。这相当于 Lambert W function 的主要分支, W0,我认为这是您想要的解决方案分支。 与 lambertW 一样, 有一个 wrightOmega符号数学工具箱中的函数。不幸的是,对于大量输入,这也可能很慢。但是,您可以使用我的 wrightOmegaq在 GitHub 上用于复值浮点( double 或单精度)输入。该函数更准确、完全矢量化,并且比使用内置的 wrightOmega 进行浮点输入快三到四个数量级。 对于那些感兴趣的人,wrightOmegaq 基于这篇优秀的论文: Piers W. Lawrence, Robert M. Corless, and David J. Jeffrey, "Algorithm 917: Complex Double-Precision Evaluation of the Wright omega Function," ACM Transactions on Mathematical Software, Vol. 38, No. 3, Article 20, pp. 1-17, Apr. 2012. 该算法超越了 Halley's method 的三次收敛用于 Cleve Moler 的 Lambert_W并使用四阶收敛的寻根方法(Fritsch、Shafer 和 Crowley,1973 年)在不超过两次迭代中收敛。 另外,为了进一步加速 Moler 的 Lambert_W 使用级数展开,参见 my answer at Math.StackExchange . 关于Matlab:求解对数方程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28702752/ |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |